package modelLayer;
import java.util.ArrayList;
/**
 * Her er klassen VareKartotek, som indeholder objekterne af klassen Vare.
 * 
 * @author (Gruppe 2) 
 * @version (1.0)
 */
public class VareGruppe
{

    private String placering;
    private long stregkode;
    private String beskrivelse;
    private int pris;
    private int antal;
    private ArrayList<Vare> mineVarer;

    /**
     * Konstruktøren for objekter af klassen VareKartotek.
     * @param placering En placering af varen i butikken.
     * @param stregkode En stregkode af varen.
     * @param beskrivelse En beskrivelse af varen.
     * @param pris En stk. pris af varen.
     * @param antal Antal af vare i butikken.
     */
    public VareGruppe(String placering, long stregkode, String beskrivelse, int pris)
    {
        this.placering = placering;
        this.stregkode = stregkode;
        this.beskrivelse = beskrivelse;
        this.pris = pris;
        antal = mineVarer.size();

    }

    /**
     * Denne metode returnere instancen variablen placering.
     * @return placering.
     */
    public String getPlacering()
    {
        return placering;
    }

    /**
     * Denne metode returnere instancen variablen stregkode.
     * @return stregkode
     */
    public long getStregkode()
    {
        return stregkode;
    }

    /**
     * Denne metode returnere instancen variablen beskrivelse.
     * @return beskrivelse
     */
    public String getBeskrivelse()
    {
        return beskrivelse;
    }

    /**
     * Denne metode returnere instancen variablen pris.
     * @return pris
     */
    public int getPris()
    {
        return pris;
    }

    /**
     * Denne metode returnere instancen variablen antal.
     * @return antal
     */
    public int getAntal()
    {
        return antal;
    }

    /**
     * Denne metode ændre instancen variablen placering.
     */
    public void setPlacering(String placering)
    {
        this.placering = placering;
    }

    /**
     * Denne metode ændre instancen variablen stregkode.
     */
    public void setStregkode(long stregkode)
    {
        this.stregkode = stregkode;
    }

    /**
     * Denne metode ændre instancen variablen beskrivelse.
     */
    public void setBeskrivelse(String beskrivelse)
    {
        this.beskrivelse = beskrivelse;
    }

    /**
     * Denne metode ændre instancen variablen pris.
     */
    public void setPris(int pris)
    {
        this.pris = pris;
    }

    /**
     * Denne metode ændre instancen variablen antal.
     */
    public void setAntal()
    {
        antal = mineVarer.size();
    }

    /**
     * Denne metode tilføjer et objekt fra klassen Vare til klassens ArrayList.
     * @param Vare vare
     */
    public void addVare(Vare vare)
    {
        if(checkId(vare) == false)
        {
            mineVarer.add(vare);
        }
        else
        {
            System.out.println("Du kan ikke tilføje 2 varer med samme id");
        }

    }

    /**
     * Denne metode printer alle oplysninger, der er i klassen VareKartotek, og oplysningerne i de objekter, der er tilføjet til klassen Varekartotek, fra klassen Vare.
     */
    public ArrayList<String> printVareGruppe()
    {
        ArrayList<String> print = new ArrayList<String>();

        for(Vare v : mineVarer)
        {
            print.add("id nummer: " + v.getId());
        }
        return print;
    }

    /**
     * Denne metode finder bestemte objekter af klassen Vare via Arraylisten, ved at søge efter objektets id.
     * @param long id
     * @return Vare v
     */
    public Vare findVare(long id)
    {
        int index = 0;
        boolean searching = true;
        while(searching == true && mineVarer.size()>index)
        {
            Vare v = mineVarer.get(index);
            if(v.getId()==id)
            {
                searching = false;
            }
            else
            {
                index++;
            }
        }
        if(!searching)
        {
            return mineVarer.get(index);
        }
        else
        {
            return null;
        }
    }

    /**
     * Denne metode finder bestemte objekter af klassen Vare via Arraylisten, ved at søge efter objektets id.
     * Derefter bliver objektets parameter opdateret.
     * @param long id
     * @return boolean opdaterVare
     */
    public boolean opdaterVare(long id, long nyId)
    {
        boolean opdaterVare = false;
        while(opdaterVare == false)
        {
            try
            {
                Vare v = findVare(id);
                v.setId (nyId);
                opdaterVare = true;
            }
            catch (Exception opdaterVarer)
            {
                System.out.println("Kunne ikke finde Vare - prøv et andet id");
                opdaterVare = true;
            }
        }	
        return opdaterVare;
    }

    /**
     * Denne metode finder bestemte objekter af klassen Vare via Arraylisten, ved at søge efter objektets id.
     * Derefter bliver objektet slettet.
     * @param long id
     * @return boolean sletVare
     */
    public boolean sletVare(long id)
    {
        boolean sletVare = false;
        while(sletVare == false)
        {
            try
            {
                Vare v = findVare(id);
                mineVarer.remove(v);
                sletVare = true;
            }
            catch (Exception sletVarer)
            {
                System.out.println("Kunne ikke finde vare - prøv et andet id");
                sletVare = true;
            }   
        }
        return sletVare;
    }

    /**
     * En metode some tjekker om en vare med samme id allerede findes i vores ArrayList
     * hvis den finder en udksriver den en besked om at man ikke kan tilføje 2 med samme.
     * @param Vare v
     * @return boolean found
     */
    public boolean checkId(Vare v)
    {
        boolean found = false;
        int index = 0;
        while(index < mineVarer.size())
        {
            Vare vId = mineVarer.get(index);
            if(v.getId() != vId.getId())
            {
                found = false;
                index++;
            }
            else
            {
                found = true;
                index++;
            }
        }
        return found;
    }

}
